package cn.tedu._05mvcboot02.Controller;

import cn.tedu._05mvcboot02.common.response.JsonResult;
import cn.tedu._05mvcboot02.mapper.UserMapper;
import cn.tedu._05mvcboot02.pojo.dto.InsertDTO;
import cn.tedu._05mvcboot02.pojo.entity.User;
import cn.tedu._05mvcboot02.pojo.vo.UserListVO;
import cn.tedu._05mvcboot02.pojo.vo.UserVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

//@Controller
@Slf4j
@Api(tags = "用户模块")
@RestController
@RequestMapping("/v1/users/")
public class UserController {
    @Autowired(required = false)
    private UserMapper userMapper;

    /**
     * 1.确定是否需要VO,DTO类
     * 2.梳理业务逻辑，确定接口，比如已注册功能为例
     * 2.1接收客户端传递的数据
     * 2.2校验数据合法性
     * 2.3确定用户名是否被占用
     * 2.3.1如果被占用，返回结束[select接口]
     * 2.3.2未被占用，插入数据并返回[insert接口]
     */
    /*
    添加用户功能
     */
    @PostMapping("insert")
    @ApiOperation(value = "添加用户功能")
    public JsonResult insert(InsertDTO insertDTO) {
        User user = new User();
        /*user.setUsername(insertDTO.getUsername());
        user.setPassword(insertDTO.getPassword());
        user.setNickname(insertDTO.getNickname());
        也可以用↓
        */
        BeanUtils.copyProperties(insertDTO, user);
        user.setCreated(new Date());
        userMapper.insert(user);
        return JsonResult.ok();


    }

    /*
    2.查询用户列表
     */
    @GetMapping("userList")
    @ApiOperation(value = "查询用户列表功能")
    public JsonResult userList() {
        List<UserListVO> userListVOS=userMapper.userList();
        return JsonResult.ok(userListVOS);
    }
    /*
    3.删除功能
     */
    @GetMapping("delete")
    @ApiOperation(value = "删除功能")
    public JsonResult delete(Integer id) {
        userMapper.delete(id);
        return JsonResult.ok();
    }
    /*
     4.更新功能
     */
    @PostMapping("update")
    @ApiOperation(value = "更新功能")
    public JsonResult update(User user){
        userMapper.update(user);
        return JsonResult.ok();
    }
    //5.根据用户ID查询指定用户的用户名和密码和昵称
    @GetMapping("select/{id}")
    @ApiOperation(value = "查询用户信息功能")
    public JsonResult select(@PathVariable Integer id){
        if(id<0){
            throw new IllegalArgumentException("编号不能小于0");
        }
        UserVO userVO=userMapper.select(id);
        return JsonResult.ok(userVO);
    }

}
